package com.hsnn.medstgmini.sys.controller;

import java.util.Date;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.hsnn.medstgmini.Constants;
import com.hsnn.medstgmini.sys.model.PrivilegeType;
import com.hsnn.medstgmini.sys.model.SysPrivilege;
import com.hsnn.medstgmini.sys.model.SysRole;
import com.hsnn.medstgmini.sys.model.SysRoleType;
import com.hsnn.medstgmini.sys.model.SysUser;
import com.hsnn.medstgmini.sys.service.SysPrivilegeManager;
import com.hsnn.medstgmini.sys.service.SysRoleManager;
import com.hsnn.medstgmini.sys.service.SysUserManager;
import com.hsnn.medstgmini.util.Pagination;

/**
 * @category 权限
 * @author CCL
 */
@Controller
@RequestMapping("/sysPrivilege")
public class SysPrivilegeController {

	private static final Logger log = Logger
			.getLogger(SysPrivilegeController.class);

	@Autowired
	private SysUserManager userManager;

	@Autowired
	private SysPrivilegeManager privilegeManager;

	@Autowired
	private SysRoleManager roleManager;

	@Autowired
	private HttpServletRequest request;

	@Autowired
	private HttpSession session;

	/**
	 * @category 获取当前登陆人信息
	 * @date 2015年6月14日
	 * @return
	 */
	private SysUser getUser() {
		return (SysUser) session.getAttribute(Constants.USERINFO);
	}

	/**
	 * @category 跳转权限管理页面
	 * @return
	 */
	@RequestMapping("/privilege")
	public String privilege(Model model) {
		model.addAttribute("privilegeTypeList", PrivilegeType.values());
		return "/sys/privilege";
	}

	/**
	 * @category 中心查询所有权限列表
	 * @date 2015年6月16日
	 * @param roleId当前编辑角色id
	 * @return
	 */
	@RequestMapping("/getPrivilegeList")
	@ResponseBody
	public List<SysPrivilege> getPrivilegeList(String roleId) {
		List<SysPrivilege> list = null;
		try {
			list = privilegeManager.getPrivilegeList(roleId);
		} catch (Exception e) {
			log.error("",e);
		}
		return list;
	}

	/**
	 * @category 保存权限
	 * @param privilege
	 * @return
	 */
	@RequestMapping("/savePrivilege")
	@ResponseBody
	public Pagination savePrivilege(SysPrivilege privilege) {
		Pagination page = new Pagination(request);
		try {
			privilege = privilegeManager.savePrivilege(privilege);
			page.setRows(privilege);
			page.setSuccess(true);
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}

	/**
	 * @category 删除权限
	 * @param privilege
	 * @return
	 */
	@RequestMapping("/deletePrivilege")
	@ResponseBody
	public Pagination deletePrivilege(SysPrivilege privilege) {
		Pagination page = new Pagination(request);
		try {
			privilegeManager.deletePrivilege(privilege);
			page.setSuccess(true);
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}

	/**
	 * @category 根据角色查询权限
	 * @date 2015年6月16日
	 * @param roleId当前编辑角色id
	 * @return
	 */
	@RequestMapping("/getZxPrivilegeListByRole")
	@ResponseBody
	public List<SysPrivilege> getPrivilegeListByRole(String roleId,
			String rolePid) {
		log.info("enter getPrivilegeListByRole method");
		List<SysPrivilege> list = null;
		try {
			SysRole role = roleManager.getRoleById(rolePid);
			list = privilegeManager.getPrivilegeListByRole(role, roleId);
		} catch (Exception e) {
			log.error("",e);
		}
		return list;
	}

	/**
	 * @category 根据角色查询权限
	 * @date 2015年6月16日
	 * @param roleId当前编辑角色id
	 * @return
	 */
	@RequestMapping("/getPrivilegeListByRole")
	@ResponseBody
	public List<SysPrivilege> getPrivilegeListByRole(String roleId) {
		log.info("enter getPrivilegeListByRole method");
		List<SysPrivilege> list = null;
		try {
			SysRole role = getUser().getRole();
			list = privilegeManager.getPrivilegeListByRole(role, roleId);
		} catch (Exception e) {
			log.error("",e);
		}
		return list;
	}

	/**
	 * @category 查询当前登陆用户所属角色的权限（排除新增编辑用户页面所选角色的权限）
	 * @date 2015年6月16日
	 * @param roleId当前被编辑用户id
	 * @param roleId当前被编辑用户所选角色id
	 * @return
	 */
	@RequestMapping("/getExtraPrivilegeList")
	@ResponseBody
	public List<SysPrivilege> getExtraPrivilegeList(String userId, String roleId) {
		log.info("enter getExtraPrivilegeList method");
		List<SysPrivilege> list = null;
		try {
			list = privilegeManager.getExtraPrivilegeList(getUser(), userId,
					roleId);
		} catch (Exception e) {
			log.error("",e);
		}
		return list;
	}

	/**
	 * @category 主用户权限管理页面
	 * @date 2015年10月20日
	 * @param model
	 * @param userId
	 * @return
	 */
	@RequestMapping("/mainUserPrivilege")
	public String mainUserPrivilege(Model model, String userId) {
		model.addAttribute("userId", userId);
		return "/sys/mainUserPrivilege";
	}

	/**
	 * @category 查询主用户权限集合
	 * @date 2015年10月20日
	 * @param userId
	 * @return
	 */
	@RequestMapping("/getMainUserPrivilege")
	@ResponseBody
	public Pagination getMainUserPrivilege(String userId) {
		Pagination page = new Pagination(request);
		try {
			SysUser user = userManager.getUserById(userId);
			if (user == null) {
				page.setSuccess(false);
				page.setMsg("帐号不存在！");
			} else {
				String roleId = SysRoleType.getSysRoleType(user.getType())
						.getValue();
				List<Map<String, Object>> list = privilegeManager
						.getMainUserPrivilege(userId, roleId);
				page.setRows(list);
				page.setSuccess(true);
			}
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}

	/**
	 * @category 保存用户权限
	 * @date 2015年10月21日
	 * @param adds
	 * @param dels
	 * @return
	 */
	@RequestMapping("/saveUserPrivilege")
	@ResponseBody
	public Pagination saveUserPrivilege(String userId, String adds, String dels) {
		Pagination page = new Pagination(request);
		try {
			Date now =new Date();
			privilegeManager.saveUserPrivilege(userId, adds, dels,now,getUser().getId());
			page.setSuccess(true);
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}

	/**
	 * @category 子用户权限管理页面
	 * @date 2015年10月20日
	 * @param model
	 * @param userId
	 * @return
	 */
	@RequestMapping("/subUserPrivilege")
	public String subUserPrivilege(Model model, String userId) {
		model.addAttribute("userId", userId);
		return "/sys/subUserPrivilege";
	}

	/**
	 * @category 查询子用户权限集合
	 * @date 2015年10月20日
	 * @param userId
	 * @return
	 */
	@RequestMapping("/getSubUserPrivilege")
	@ResponseBody
	public Pagination getSubUserPrivilege(String userId) {
		Pagination page = new Pagination(request);
		try {
			SysUser user = userManager.getUserById(userId);
			if (user == null) {
				page.setSuccess(false);
				page.setMsg("帐号不存在！");
			} else {
				List<Map<String, Object>> list = privilegeManager
						.getSubUserPrivilege(userId);
				page.setRows(list);
				page.setSuccess(true);
			}
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}

	/**
	 * @category 主角色权限管理页面
	 * @date 2015年10月20日
	 * @param model
	 * @param roleId
	 * @return
	 */
	@RequestMapping("/mainRolePrivilege")
	public String mainRolePrivilege(Model model, String roleId) {
		model.addAttribute("roleId", roleId);
		return "/sys/mainRolePrivilege";
	}

	/**
	 * @category 查询主角色权限集合
	 * @date 2015年10月20日
	 * @param roleId
	 * @return
	 */
	@RequestMapping("/getMainRolePrivilege")
	@ResponseBody
	public Pagination getMainRolePrivilege(String roleId) {
		Pagination page = new Pagination(request);
		try {
			List<Map<String, Object>> list = privilegeManager
					.getMainRolePrivilege(roleId);
			page.setRows(list);
			page.setSuccess(true);
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}

	/**
	 * @category 子角色权限管理页面
	 * @date 2015年10月20日
	 * @param model
	 * @param roleId
	 * @return
	 */
	@RequestMapping("/subRolePrivilege")
	public String subRolePrivilege(Model model, String roleId) {
		model.addAttribute("roleId", roleId);
		return "/sys/subRolePrivilege";
	}

	/**
	 * @category 查询子角色权限集合
	 * @date 2015年10月20日
	 * @param roleId
	 * @return
	 */
	@RequestMapping("/getSubRolePrivilege")
	@ResponseBody
	public Pagination getSubRolePrivilege(String roleId) {
		Pagination page = new Pagination(request);
		try {
			SysUser zhuSu = getUser().getRootUser();
			String zhuUserId =getUser().getId();
			if(null!=zhuSu){
				zhuUserId=zhuSu.getId();
			}
			List<Map<String, Object>> list = privilegeManager
					.getSubRolePrivilege(roleId,zhuUserId);
			page.setRows(list);
			page.setSuccess(true);
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}

	/**
	 * @category 保存角色权限
	 * @date 2015年10月21日
	 * @param adds
	 * @param dels
	 * @return
	 */
	@RequestMapping("/saveRolePrivilege")
	@ResponseBody
	public Pagination saveRolePrivilege(String roleId, String adds, String dels) {
		Pagination page = new Pagination(request);
		try {
			Date now =new Date();
			privilegeManager.saveRolePrivilege(roleId, adds, dels,now,getUser().getId());
			page.setSuccess(true);
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}

	/**
	 * @category 子角色权限管理页面（只读）
	 * @date 2015年10月20日
	 * @param model
	 * @param roleId
	 * @return
	 */
	@RequestMapping("/subRolePrivilegeAsRead")
	public String subRolePrivilegeAsRead(Model model, String roleId) {
		model.addAttribute("roleId", roleId);
		return "/sys/subRolePrivilegeAsRead";
	}

	/**
	 * @category 查询子角色权限集合（只读）
	 * @date 2015年10月20日
	 * @param roleId
	 * @return
	 */
	@RequestMapping("/getSubRolePrivilegeAsRead")
	@ResponseBody
	public Pagination getSubRolePrivilegeAsRead(String roleId) {
		Pagination page = new Pagination(request);
		try {
			List<Map<String, Object>> list = privilegeManager
					.getSubRolePrivilegeAsRead(roleId);
			page.setRows(list);
			page.setSuccess(true);
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}

	/**
	 * @category 主角色权限管理页面
	 * @date 2015年10月20日
	 * @param model
	 * @param roleId
	 * @return
	 */
	@RequestMapping("/mainRolePrivilegeTemp")
	public String mainRolePrivilegeTemp(Model model, String roleId) {
		model.addAttribute("roleId", roleId);
		return "/sys/mainRolePrivilegeTemp";
	}

	/**
	 * @category 查询主角色权限集合
	 * @date 2015年10月20日
	 * @param roleId
	 * @return
	 */
	@RequestMapping("/getMainRolePrivilegeTemp")
	@ResponseBody
	public Pagination getMainRolePrivilegeTemp(String roleId) {
		Pagination page = new Pagination(request);
		try {
			List<Map<String, Object>> list = privilegeManager
					.getMainRolePrivilegeTemp(roleId);
			page.setRows(list);
			page.setSuccess(true);
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}

}
